package web

import (
	"gitee.com/tools/internal/web/tools/common"
	"github.com/gin-gonic/gin"
	"io"
	"log"
	"net/http"
	"os"
	"path/filepath"
)

// Upload 文件上传(该功能初步完成)
func Upload(ctx *gin.Context) {
	//ctx.Request.FormFile()
	file, header, err := ctx.Request.FormFile("format")
	// 关闭文件句柄
	defer file.Close()
	if err != nil {
		ctx.JSON(http.StatusOK, common.Result{
			Code:    common.ErrorUserInputInvalid,
			Message: "参数无效",
			Data:    nil,
		})
		return
	}
	pwd, err := os.Getwd()
	if err != nil {
		log.Println("获取当前目录失败")
		ctx.JSON(http.StatusOK, common.Result{
			Code:    common.ErrSystem,
			Message: "系统错误",
			Data:    nil,
		})
		return
	}

	// 创建保存文件的目录
	uploadDir := filepath.Join(pwd, "upload")
	err = os.MkdirAll(uploadDir, os.ModePerm)
	if err != nil {
		log.Println("无法创建保存文件的目录")
		ctx.JSON(http.StatusOK, common.Result{
			Code:    common.ErrSystemCreateFile,
			Message: "系统错误",
			Data:    nil,
		})
		return
	}

	// 获取上传的文件名
	filename := filepath.Base(header.Filename)
	// 保存文件路径
	savePath := filepath.Join(uploadDir, filename)
	// 创建一个新文件，用于保存上传的文件
	out, err := os.Create(savePath)
	if err != nil {
		log.Println("无法创建保存文件的目录")
		ctx.JSON(http.StatusOK, common.Result{
			Code:    common.ErrSystemCreateFile,
			Message: "系统错误",
			Data:    nil,
		})
		return
	}
	defer out.Close()

	// 将上传文件的内容copy到新创建的文件中
	_, err = io.Copy(out, file)
	if err != nil {
		log.Println("拷贝文件内容失败")
		ctx.JSON(http.StatusOK, common.Result{
			Code:    common.ErrSystemFileCopy,
			Message: "系统错误",
			Data:    nil,
		})
		return
	}

	ctx.JSON(http.StatusOK, common.Result{
		Code:    0,
		Message: "上传成功",
		Data:    nil,
	})
	return
}

func UploadPath(path, filename string, file io.Reader) (string, error) {
	pwd, err := os.Getwd()
	if err != nil {
		return "", err
	}
	// 创建保存文件的目录
	uploadDir := filepath.Join(pwd, "upload", path)
	err = os.MkdirAll(uploadDir, os.ModePerm)
	if err != nil {
		return "", err
	}

	// 保存文件路径
	savePath := filepath.Join(uploadDir, filename)
	// 创建一个新文件，用于保存上传的文件
	out, err := os.Create(savePath)
	if err != nil {
		return "", err
	}
	defer out.Close()

	// 将上传文件的内容copy到新创建的文件中
	_, err = io.Copy(out, file)
	if err != nil {
		return "", err
	}

	return savePath, nil
}
